package com.manxi.mall.service;

import com.manxi.mall.bean.TradeProvinceOrderAmount;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author Addroc
 * @date 2024/6/14
 * 交易域统计Service接口
 * 提供电商平台交易相关的统计分析功能
 */
public interface TradeStatsService {
    /**
     * 获取某天总交易额(GMV)
     * 用于分析平台整体交易规模
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回当日总交易额
     */
    BigDecimal getGMV(Integer date);

    /**
     * 获取某天各个省份交易额
     * 用于分析不同地区的销售情况和地域分布
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各省份交易额列表
     */
    List<TradeProvinceOrderAmount> getProvinceAmount(Integer date);
    
    /**
     * 获取某天的订单总数
     * 用于分析平台交易活跃度
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回当日订单总数
     */
    Integer getOrderCount(Integer date);
    
    /**
     * 获取某天的下单用户数
     * 用于分析用户购买活跃度
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回当日下单用户数
     */
    Integer getUserCount(Integer date);
    
    /**
     * 获取某天的平均订单金额
     * 用于分析客单价变化趋势
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回当日平均订单金额
     */
    BigDecimal getAvgOrderAmount(Integer date);
    
    /**
     * 获取某天各时段的交易额分布
     * 用于分析交易时间分布规律
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各时段(0-23小时)交易额的Map
     */
    Map<Integer, BigDecimal> getHourlyOrderAmount(Integer date);
    
    /**
     * 获取某天各支付方式的交易额分布
     * 用于分析用户支付偏好
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各支付方式交易额的Map
     */
    Map<String, BigDecimal> getPaymentTypeAmount(Integer date);
    
    /**
     * 获取某天各品类的交易额分布
     * 用于分析热销品类
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回各品类交易额的Map
     */
    Map<String, BigDecimal> getCategoryAmount(Integer date);
    
    /**
     * 获取某天退款金额
     * 用于分析退款情况和售后服务质量
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回当日退款总金额
     */
    BigDecimal getRefundAmount(Integer date);
    
    /**
     * 计算某天的转化率
     * 用于分析从访问到下单的转化效果
     * @param date 日期参数，格式为yyyyMMdd
     * @return 返回当日转化率(百分比)
     */
    BigDecimal getConversionRate(Integer date);
}
